#include <bits/stdc++.h>
#define int long long
#define N 25
using namespace std;
int n, m, a[N][N], ans;
bitset<1 << 20> f[N];
inline int toint(int x, int y) { return (x - 1) * m + (y - 1); }
void dfs(int x, int y, int sta, int sum) {
  if (y > m) {
    y = 1, x++;
  }
  if (x > n) {
    if (sum > ans)
      ans = sum;
    return;
  }

  int pos = toint(x, y);
  if (f[pos][sta])
    return;
  f[pos][sta] = 1;

  // 当前位置未被选中
  if (!(sta & (1 << pos))) {
    // 情况1: 不选当前位置
    dfs(x, y + 1, sta, sum);

    // 情况2: 只选当前位置
    dfs(x, y + 1, sta | (1 << pos), sum ^ a[x][y]);

    // 情况3: 选当前位置和右边
    if (y < m && !(sta & (1 << toint(x, y + 1)))) {
      dfs(x, y + 1, sta | (1 << pos) | (1 << toint(x, y + 1)),
          sum ^ a[x][y] ^ a[x][y + 1]);
    }

    // 情况4: 选当前位置和下边
    if (x < n && !(sta & (1 << toint(x + 1, y)))) {
      dfs(x, y + 1, sta | (1 << pos) | (1 << toint(x + 1, y)),
          sum ^ a[x][y] ^ a[x + 1][y]);
    }
  } else {
    // 当前位置已被选中，直接跳过
    dfs(x, y + 1, sta, sum);
  }
}
signed main() {
  cin >> n >> m;
  int X = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      cin >> a[i][j], X ^= a[i][j];
    }
  }
  dfs(1, 1, 0, X);
  cout << ans << "\n";
  return 0;
}